#ifndef SM3_H
#define SM3_H

#include <stdint.h>
#include <stddef.h>
#include <gmssl/sm3.h>

// 直接使用GmSSL的SM3定义
// SM3_DIGEST_SIZE 已在 gmssl/sm3.h 中定义
#define SM3_DIGEST_LENGTH SM3_DIGEST_SIZE

// 使用GmSSL的SM3上下文
typedef SM3_CTX sm3_context_t;

// 初始化SM3上下文
void sm3_init(sm3_context_t *ctx);

// 添加数据到SM3计算过程 - 参数类型与GmSSL保持一致
void sm3_update(sm3_context_t *ctx, const uint8_t *data, size_t len);

// 完成SM3摘要计算
void sm3_final(sm3_context_t *ctx, unsigned char *digest);

// 一步计算SM3摘要
unsigned char *sm3(const unsigned char *data, size_t len, unsigned char *digest);

#endif /* SM3_H */
